package ar.com.larreta.comunes;

import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.Iterator;

import org.apache.log4j.Logger;

public class DescriptorDePropiedadCollection extends DescriptorDePropiedad {

	public static final Logger logger = getLogger(DescriptorDePropiedadCollection.class);
	
	@Override
	public Boolean esCollection() {
		return Boolean.TRUE;
	}

	public DescriptorDePropiedadCollection(Object origen, PropertyDescriptor descriptor, Transformador transformador) {
		super(origen, descriptor, transformador);
	}

	public void copiar(DescriptorDePropiedad origen) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException, InstantiationException {
		Object valor = null;
		Class relacionada = Transformador.getClaseRelacionada(descriptor.getPropertyType());
		Collection nuevaCollection = (Collection) relacionada.newInstance();
		Collection origenCollection = (Collection) origen.getValor();

		if (origenCollection!=null){
		Iterator it = origenCollection.iterator();
			while (it.hasNext()) {
				Object viejo = it.next();
				Object nuevo = transformador.getObjetoNuevo(viejo);
				if (nuevo!=null) {
					nuevaCollection.add(nuevo);
				} else {
					logger.debug("No se obtuvo un objeto transformado para:" + viejo.getClass().getName());
				}
			}
		}

		valor = nuevaCollection;

		setValor(valor);
	}

}
